.TH std::rand 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::rand \- std::rand

.SH Synopsis
   Defined in header <cstdlib>
   int rand();

   Returns a pseudo-random integral value from the range [0, RAND_MAX].

   std::srand() seeds the pseudo-random number generator used by rand(). If rand() is
   used before any calls to std::srand(), rand() behaves as if it was seeded with
   std::srand\fB(1)\fP.

   Each time rand() is seeded with std::srand(), it must produce the same sequence of
   values on successive calls.

   Other functions in the standard library may call rand. It is implementation-defined
   which functions do so.

   It is implementation-defined whether rand() is thread-safe.

.SH Parameters

   \fI(none)\fP

.SH Return value

   Pseudo-random integral value between 0 and RAND_MAX.

.SH Notes

   There are no guarantees as to the quality of the random sequence produced. In the
   past, some implementations of rand() have had serious shortcomings in the
   randomness, distribution and period of the sequence produced (in one well-known
   example, the low-order bit simply alternated between 1 and 0 between calls).

   rand() is not recommended for serious random-number generation needs.
   It is recommended to use C++11's random number generation facilities to replace
   rand().
   \fI(since C++11)\fP

.SH Example


// Run this code

 #include <cstdlib>
 #include <ctime>
 #include <iostream>

 int main()
 {
     std::srand(std::time(nullptr)); // use current time as seed for random generator
     int random_value = std::rand();
     std::cout << "Random value on [0, " << RAND_MAX << "]: " << random_value << '\\n';

     for (const int times = 8; const int sides : {2, 4, 6, 8})
     {
         std::cout << "Roll " << sides << "-sided dice " << times << " times: ";
         for (int n = 0; n != times; ++n)
         {
             int x = sides + 1;
             while (x > sides)
                 x = 1 + std::rand() / ((RAND_MAX + 1u) / sides);
                     // Note: 1 + rand() % sides is biased
             std::cout << x << ' ';
         }
         std::cout << '\\n';
     }
 }

.SH Possible output:

 Random value on [0, 2147483647]: 948298199
 Roll 2-sided dice 8 times: 2 2 1 2 1 1 2 2
 Roll 4-sided dice 8 times: 1 3 4 2 1 3 3 1
 Roll 6-sided dice 8 times: 3 2 1 6 6 4 4 2
 Roll 8-sided dice 8 times: 4 5 6 6 3 6 1 2

.SH See also

   uniform_int_distribution produces integer values evenly distributed across a range
   \fI(C++11)\fP                  \fI(class template)\fP
   srand                    seeds pseudo-random number generator
                            \fI(function)\fP
   RAND_MAX                 maximum possible value generated by std::rand
                            (macro constant)
   randint                  generates a random integer in the specified range
                            \fI(function template)\fP
   C documentation for
   rand
